iT邦幫忙

2026 iThome 鐵人賽

DAY 3
1

昨天完成了工具安裝。今天把專案的檔案位置定下來,避免後面功能增加後,程式碼和文件散落各處。

這個專案會使用 Monorepo。所有內容放在同一個 Git repository,再依用途分成 backend、frontend、infra 和 docs。對目前的 30 天開發規模來說,這樣比較容易一起管理,也方便從同一份 README 了解整個專案。

Monorepo 的取捨

方式 優點 缺點
Monorepo 所有內容集中、共用設定簡單 需要維持清楚的資料夾規則
多個 Repo 各自獨立 共享程式碼與設定時需要額外管理

目前選 Monorepo。之後如果前後端需要分開部署,再從同一個 repository 建立對應流程。

今天建立的結構

2026-learning-coach/
│
├── backend/
│   ├── main.py
│   ├── models/
│   ├── api/
│   └── requirements.txt
│
├── frontend/
│   ├── package.json
│   ├── src/
│   └── public/
│
├── infra/
│   ├── docker-compose.yml
│   └── nginx.conf
│
├── docs/
│   ├── prd.md
│   ├── architecture.md
│   └── api.md
│
├── .gitignore
├── README.md
└── .git/

backend

放 FastAPI 應用、API 端點、LangGraph 流程、資料庫連線、ORM 和業務邏輯。

預計結構:

backend/
├── main.py
├── database.py
├── models.py
├── schemas.py
├── api/
│   ├── users.py
│   ├── plans.py
│   └── coach.py
├── agents/
│   ├── planner.py
│   ├── coach.py
│   └── reviewer.py
└── requirements.txt

frontend

放 Next.js 應用、React 組件、頁面和路由。

frontend/
├── package.json
├── src/
│   ├── pages/
│   │   ├── login.tsx
│   │   ├── onboarding.tsx
│   │   ├── dashboard.tsx
│   │   └── chat.tsx
│   ├── components/
│   ├── hooks/
│   └── styles/
└── public/

infra

放 Docker Compose、Dockerfile、Nginx 和部署設定。

infra/
├── docker-compose.yml
├── Dockerfile.backend
├── Dockerfile.frontend
└── nginx.conf

docs

放產品需求、系統架構、API 說明、部署指南與架構圖片。

docs/
├── prd.md
├── architecture.md
├── api.md
├── deployment.md
└── images/

建立資料夾

進入專案目錄:

cd ~/projects/2026-learning-coach

建立後端、前端、基礎設施與文件資料夾:

mkdir -p backend/api
mkdir -p backend/agents
mkdir -p frontend/src/pages
mkdir -p frontend/src/components
mkdir -p frontend/public
mkdir infra
mkdir -p docs/images

建立 .gitignore

.gitignore 用來排除不應提交的檔案,例如密碼、虛擬環境、node_modules 和暫存資料。

檔案位置:.gitignore

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
venv/
env/
.venv

# Node
node_modules/
npm-debug.log
dist/
.next/

# IDE
.vscode/
.idea/
*.swp

# Environment variables
.env
.env.local

# OS
.DS_Store
Thumbs.db

# Database
*.db
*.sqlite

建立 README.md

README 先記錄專案用途、資料夾職責與初步啟動方式。

檔案位置:README.md

# 個人化AI學習教練

用30天用Claude Code + Ollama + LangGraph打造AI學習教練系統。Claude Code是開發夥伴,Ollama本機模型才是實際提供對話能力的角色。

## 專案結構

- backend/ - FastAPI後端應用
- frontend/ - Next.js前端應用
- infra/ - Docker和部署配置
- docs/ - 文檔和架構說明

## 快速開始

### 後端
~~~bash
cd backend
python -m pip install -r requirements.txt
python main.py
~~~

### 前端
~~~bash
cd frontend
npm install
npm run dev
~~~

注:這是 Day 23 完成前端時才能用的命令,現在 frontend/ 還是空資料夾,先不要執行。

## 文檔

- [產品需求](docs/prd.md)
- [系統架構](docs/architecture.md)
- [API說明](docs/api.md)

目前 README 的啟動指令先作為預覽,前端和後端完成後再補上實際設定。

建立架構說明文件

檔案位置:docs/architecture.md

# 系統架構

## 整體設計

使用者
  ↓
Next.js前端(Day 23)
  ↓
FastAPI後端(Day 6+)
  ↓
LangGraph Agent(Day 9+)
  ↓
Ollama本機模型 + SQLite

## 各模塊職責

### 前端(frontend/)
- 用戶登入
- 學習檔案管理
- 計畫檢視
- 每日任務
- 與教練對話

### 後端(backend/)
- REST API端點
- LangGraph Agent流程
- 數據庫操作
- 業務邏輯

### 數據庫
- SQLite檔案存儲
- 用戶、計畫、進度資料

這份文件會跟著架構更新。等資料庫決定後,記得同步調整資料庫段落。

第一次 commit

先查看狀態,再提交目前的架構:

git status
git add .
git commit -m "Day 3: 建立Monorepo架構

- 建立backend/、frontend/、infra/、docs/資料夾
- 編寫.gitignore、README.md、architecture.md
- 為專案搭建清晰的目錄結構"

這個 commit 是專案的起點。之後每完成一個可驗證的功能,就用清楚的訊息提交一次。

常見問題

資料夾一定要完全一樣嗎?

不用。這是目前的建議結構。只要規則清楚、同一類檔案放在同一個位置,後面可以依實作需要調整。

為什麼先建立空資料夾?

因為後面新增功能時,檔案位置已經確定。這能減少一邊開發、一邊重新整理結構的情況。

.gitignore 有什麼用?

它會防止密碼、環境變數、套件資料夾和資料庫檔案被提交到 Git。

Day 3 完成檢查

Day 1 ✓ 產品定義完成
Day 2 ✓ 開發環境準備
Day 3 ✓ 專案架構設計
Day 4 ⬜ 資料模型設計
Day 5 ⬜ 實作功能

今天先把檔案和責任分開。明天開始設計資料庫模型,處理使用者、目標、計畫、任務和進度紀錄之間的關係。


上一篇
Day 2:開發環境建置
下一篇
Day 4:資料庫設計
系列文
30天用 Claude Code + LangGraph 實作個人化 AI 學習教練10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
tsengyulun
iT邦新手 5 級 ‧ 2026-09-19 17:26:54

多米多羅有錯嗎

pst iT邦新手 5 級 ‧ 2026-09-19 17:28:20 檢舉

這是技術性發言嗎

我要留言

立即登入留言